package study.thread.cas;

/*
 * Compare And Swap(CAS)操作包含三个操作数  ——  内存位置（V）、预期原值（A）和新值(B).
 * 
 * (1).如果内存位置的值与预期原值相匹配，那么处理器会自动将该位置值更新为新值。否则，处理器不做任何操作。无论哪种情况，
 * 它都会在CAS指令之前返回该位置的值。
 * 
 * (2).从地址V读取值A，执行多步计算来获得新值B，然后使用CAS将V的值从A改为B。如果V处的值尚未同时更改，则CAS操作成功.
 * 
 * (3).以下代码用同步语法说明CAS的工作原理.
 */
public class SimulatedCAS {
	private int value = 0;
	
	public synchronized int getValue() {
		return value;
	}
	
	public SimulatedCAS(int value) {
		super();
		this.value = value;
	}

	public synchronized int compareAndSwap(int expectedValue,int newValue) {
		
		if (value == expectedValue) {
			value = newValue;
		}
		return value;
	}
}
